﻿Public Class AnimationSchocklaser
    Inherits ObjektAnimation
    Const HalteFrame As Integer = 2
    Dim Zähler As Integer = 0
    Dim LaserReichweite As Integer
    Enum Richtungen
        Nord
        Ost
        Süd
        West
    End Enum
    Dim Richtung As Richtungen
    Public Sub New(ByVal X As Integer, ByVal Y As Integer, ByVal Musikspielen As Boolean, ByVal Schlacht As Integer)
        MyBase.New(True, Schlacht)
        Dim G As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(X, Y, ObjektSpielfeld.Bodenschlacht).Gebäude
        If TypeOf G Is GebäudeSchocklaser_N Then
            Richtung = Richtungen.Nord
        ElseIf TypeOf G Is GebäudeSchocklaser_O Then
            Richtung = Richtungen.Ost
        ElseIf TypeOf G Is GebäudeSchocklaser_S Then
            Richtung = Richtungen.Süd
        ElseIf TypeOf G Is GebäudeSchocklaser_W Then
            Richtung = Richtungen.West
        End If
        LaserReichweite = G.Reichweite
        P.X = X
        P.Y = Y
        If Musikspielen = True Then
            MusikEngine.LoadWav(My.Settings.Resourcenpfad + "Sound\Schocklaser.wav", False)
        End If
        Frames = 39
    End Sub
    Public Overrides Function Malen(ByVal intColor As System.Drawing.Color, Optional ByVal Zoomfaktor As Single = 1.0) As Boolean
        Dim sngRotation As Double = 0
        With Grafikengine.recBild
            .X = Hauptmenü.Feldbreite * 3 * Frame : .Width = Hauptmenü.Feldbreite * 3
            .Y = 0 : .Height = Hauptmenü.Feldbreite * 3
        End With
        Grafikengine.szfScale = Nothing
        Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite * 3 / 2, Hauptmenü.Feldbreite * 3 / 2)
        'Zuerst malen wir den Kopf der Schocklaseranimation
        Select Case Richtung
            Case Richtungen.Nord
                sngRotation = Math.PI
                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY - Hauptmenü.Feldbreite * 2)
            Case Richtungen.Ost
                sngRotation = Math.PI * 1.5#
                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX + Hauptmenü.Feldbreite * 2, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
            Case Richtungen.Süd
                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY + Hauptmenü.Feldbreite)
            Case Richtungen.West
                sngRotation = Math.PI / 2
                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX - Hauptmenü.Feldbreite * 2, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
        End Select
        Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStart, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)

        If Frame >= 18 Then
            'Jetzt kommt der Strahl dran
            'Größe 48 auf Hauptmenü.Feldbreite*2
            Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite * 3 / 2, Hauptmenü.Feldbreite)
            'Die Sng Rotation stimmt auf jeden Fall
            With Grafikengine.recBild
                .X = Hauptmenü.Feldbreite * 3 * (Frame - 18) : .Width = Hauptmenü.Feldbreite * 3
                .Y = 0 : .Height = Hauptmenü.Feldbreite * 2
            End With
            Select Case Richtung
                Case Richtungen.Nord
                    For Y = -4 To -LaserReichweite - 1 Step -2
                        If Objektverwalter.Spielfeld.OnMap(P.X, P.Y + Y) Then
                            If Objektverwalter.Spielfeld.OnMap(P.X, P.Y + Y - 1) Then
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * (P.Y + Y) + Objektverwalter.Spielfeld.BildschirmKooY - Hauptmenü.Feldbreite / 2)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                            Else
                                Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                                Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite * 3 / 2, Hauptmenü.Feldbreite / 2)
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * (P.Y + Y) + Objektverwalter.Spielfeld.BildschirmKooY)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                Exit For
                            End If
                        Else
                            Exit For
                        End If
                    Next
                Case Richtungen.Süd
                    For Y = 3 To LaserReichweite + 1 Step 2
                        If Objektverwalter.Spielfeld.OnMap(P.X, P.Y + Y) Then
                            If Objektverwalter.Spielfeld.OnMap(P.X, P.Y + Y + 1) Then
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * (P.Y + Y) + Objektverwalter.Spielfeld.BildschirmKooY + Hauptmenü.Feldbreite / 2)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                            Else
                                Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                                Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite * 3 / 2, Hauptmenü.Feldbreite / 2)
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * P.X + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * (P.Y + Y) + Objektverwalter.Spielfeld.BildschirmKooY)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                Exit For
                            End If
                        Else
                            Exit For
                        End If
                    Next
                Case Richtungen.Ost
                    For X = 4 To LaserReichweite + 1 Step 2
                        If Objektverwalter.Spielfeld.OnMap(P.X + X, P.Y) Then
                            If Objektverwalter.Spielfeld.OnMap(P.X + X + 1, P.Y) Then
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * (P.X + X) + Objektverwalter.Spielfeld.BildschirmKooX + Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                            Else
                                Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                                Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite * 3 / 2, Hauptmenü.Feldbreite / 2)
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * (P.X + X) + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                Exit For
                            End If
                        Else
                            Exit For
                        End If
                    Next
                Case Richtungen.West
                    For X = -4 To -LaserReichweite - 1 Step -2
                        If Objektverwalter.Spielfeld.OnMap(P.X + X, P.Y) Then
                            If Objektverwalter.Spielfeld.OnMap(P.X + X - 1, P.Y) Then
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * (P.X + X) + Objektverwalter.Spielfeld.BildschirmKooX - Hauptmenü.Feldbreite / 2, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                            Else
                                Grafikengine.recBild.Height = Hauptmenü.Feldbreite
                                Grafikengine.ptfRotCenter = New Point(Hauptmenü.Feldbreite * 3 / 2, Hauptmenü.Feldbreite / 2)
                                Grafikengine.ptfPosition = New Drawing.Point(Hauptmenü.Feldbreite * (P.X + X) + Objektverwalter.Spielfeld.BildschirmKooX, Hauptmenü.Feldbreite * P.Y + Objektverwalter.Spielfeld.BildschirmKooY)
                                Grafikengine.Sprite.Draw2D(TexturenHalter.GetSchocklaserStrahl, Grafikengine.recBild, Grafikengine.szfScale, Grafikengine.ptfRotCenter, sngRotation, Grafikengine.ptfPosition, intColor)
                                Exit For
                            End If
                        Else
                            Exit For
                        End If
                    Next
            End Select

        End If
       
        If Frame >= Frames Then
            Return False
        End If

        If HalteFrame <= Zähler Then
            Frame += 1
            Zähler = 0
        Else
            Zähler += 1
        End If

        Return True
    End Function
End Class
